Programmable logic devices (PLDs) exist as a well-known type of integrated circuit (IC) that may be programmed by a user to perform specified logic functions. There are different types of programmable logic devices, such as programmable logic arrays (PLAs) and complex programmable logic devices (CPLDs). One type of programmable logic device, known as a field programmable gate array (FPGA), is very popular because of a superior combination of capacity, flexibility, time-to-market, and cost.
An FPGA typically includes an array of configurable logic blocks (CLBs) surrounded by a ring of programmable input/output blocks (IOBs). The CLBs and IOBs are interconnected by a programmable interconnect structure. The CLBs, IOBs, and interconnect structure are typically programmed by loading a stream of configuration data (known as a bitstream) into internal configuration memory cells that define how the CLBs, IOBs, and interconnect structure are configured. An FPGA may also include various dedicated logic circuits, such as memories, microprocessors, digital clock managers (DCMs), and input/output (I/O) transceivers.
Traditional complex processing systems are typically implemented using software running on a microprocessor in conjunction with multiple dedicated hardware blocks and thus are suitable for implementation using a PLD. In such systems, hardware blocks are used to perform complex functions more efficiently than performing such functions in software. Supporting mixed hardware/software processing systems with an appropriate hardware/software platform is desirable. Communication between the software portion of the system (i.e., software running on a processor) and the hardware portion of the system should be efficient. It is further desirable to encapsulate platform-dependent aspects of communication between the software and hardware portions of the system in order to provide an efficient programming interface. It is further desirable to provide an automated design tool to map hardware/software systems onto a hardware/software platform in a PLD.